package com.dys.processcontrol.circularstructure;

import java.util.Scanner;

/**
 * @className: com.dys.processcontrol.circularstructure.ForDrillTest
 * @description: 循环练习
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/06/19 下午10:33
 */
public class ForDrillTest {

    public static void main(String[] args) {
        aHundredDollarsForAHundredChickens2();
    }

    /**
     * 输出1-100中被5整除的数，每行输出6个
     */
    public static void outNumber() {
        // 引入一个计数器,初始值为0
        int count = 0;
        for (int i = 1; i < 101; i++) {
            if (i % 5 == 0) {// 被5整除的数
                System.out.print(i + "\t");
                count++;// 每次在控制台输出一个数，count就执行加1操作
                if (count % 6 == 0) {
                    System.out.println();// 换行
                }
            }
        }
    }

    /**
     * 实现一个功能：
     * 1.录入10个整数，当输入的数是666时，退出程序
     * 2.判断其中录入正数的个数并输出
     * 3.判断系统的退出状态，是正常退出还是被迫退出
     */
    public static void input10Number() {
        Scanner sc = new Scanner(System.in);
        // 引入一个计数器，初始值为0
        int count = 0;
        // 引入一个布尔类型的变量
        boolean flag = true; // 理解为一个“开关”，默认情况下开关是开着的
        // 录入10个整数
        for (int i = 1; i < 11; i++) {
            System.out.println("请录入第" + i + "个数: ");
            int number = sc.nextInt();
            if (number > 0) {// 录入的正数
                count++;
            }
            if (number == 666) {
                flag = false; // 当遇到666时，“开关”被关上了
                // 停止循环
                break;
            }
        }
        System.out.println("录入正数的个数为: " + count);
        // 方式1
        String exitState = flag == true ? "正常退出" : "被迫退出";
        // 方式2
        // if (flag == true) {
        //     System.out.println("正常退出");
        // } else {
        //     System.out.println("被迫退出");
        // }
        System.out.println(exitState);
    }

    /**
     * 打印九九乘法表
     */
    public static void multiplicationTable() {
        /*
        System.out.print("1*6=6"+"\t");
        System.out.print("2*6=12"+"\t");
        System.out.print("3*6=18"+"\t");
        System.out.print("4*6=24"+"\t");
        System.out.print("5*6=30"+"\t");
        System.out.print("6*6=36"+"\t");
        */
        // 有规律的数
        System.out.println("1*1=1" + "\t");
        for (int i = 1; i <= 2; i++) {
            System.out.print(i + "*2=" + i * 2 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 3; i++) {
            System.out.print(i + "*3=" + i * 3 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 4; i++) {
            System.out.print(i + "*4=" + i * 4 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 5; i++) {
            System.out.print(i + "*5=" + i * 5 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 6; i++) {
            System.out.print(i + "*6=" + i * 6 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 7; i++) {
            System.out.print(i + "*7=" + i * 7 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 8; i++) {
            System.out.print(i + "*8=" + i * 8 + "\t");
        }
        // 换行
        System.out.println();
        for (int i = 1; i <= 9; i++) {
            System.out.print(i + "*9=" + i * 9 + "\t");
        }
    }

    /**
     * 打印九九乘法表
     */
    public static void multiplicationTable2() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }

    /**
     * 九九乘法表倒着输出
     */
    public static void multiplicationTable3() {
        for (int i = 9; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }

    /**
     * 打印长方形
     * ************
     * ************
     * ************
     * ************
     */
    public static void rectangle() {
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.println();
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.println();
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.println();
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
        System.out.print("*");
    }

    /**
     * 打印长方形
     * *************************
     * *************************
     * *************************
     * *************************
     */
    public static void rectangle2() {
        for (int j = 1; j <= 25; j++) {
            System.out.print("*");
        }
        System.out.println();
        for (int j = 1; j <= 25; j++) {
            System.out.print("*");
        }
        System.out.println();
        for (int j = 1; j <= 25; j++) {
            System.out.print("*");
        }
        System.out.println();
        for (int j = 1; j <= 25; j++) {
            System.out.print("*");
        }
    }

    /**
     * 打印长方形
     * *************************
     * *************************
     * *************************
     * *************************
     * *************************
     */
    public static void rectangle3() {
        for (int i = 1; i <= 5; i++) { // i: 控制行数
            for (int j = 1; j <= 25; j++) { // j: 控制*数
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印距离前面有一定空隙的长方形：增加空格
     * *************************
     * *************************
     * *************************
     * *************************
     * *************************
     */
    public static void rectangle4() {
        for (int i = 1; i <= 5; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= 5; k++) { // k: 控制空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= 25; j++) {// j: 控制*数
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印平行四边形：增加空格，每行空格数不一样
     * ********************
     * ********************
     * ********************
     * ********************
     * ********************
     */
    public static void rectangle5() {
        for (int i = 1; i <= 5; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= 9 - i; k++) { // k: 控制空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= 20; j++) {// j: 控制*数
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印三角形：
     * *
     * ***
     * *****
     * *******
     */
    public static void triangle() {
        for (int i = 1; i <= 5; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= 9 - i; k++) { // k: 控制空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i - 1); j++) {// j: 控制*数
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 打印实心菱形：
     */
    public static void rhomboid() {
        // 上面的三角形
        for (int i = 1; i <= 4; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= (9 - i); k++) { // k: 控制空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i - 1); j++) {// j: 控制*数
                System.out.print("*");
            }
            System.out.println();
        }
        // 下面三角形
        for (int i = 1; i <= 3; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= (i + 5); k++) { // k: 控制空格数-->行数+5
                System.out.print(" ");
            }
            for (int j = 1; j <= (7 - 2 * i); j++) {// j: 控制*数-->7-2行数
                System.out.print("*");
            }
            System.out.println();
        }

    }

    /**
     * 打印空心心菱形：
     */
    public static void rhomboid2() {
        // 上面的三角形
        for (int i = 1; i <= 4; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= (9 - i); k++) { // k: 控制空格数
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i - 1); j++) {// j: 控制*数
                if (j == 1 || j == (2 * i - 1)) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        // 下面三角形
        for (int i = 1; i <= 3; i++) { // i: 控制行数
            // 加空格
            for (int k = 1; k <= (i + 5); k++) { // k: 控制空格数-->行数+5
                System.out.print(" ");
            }
            for (int j = 1; j <= (7 - 2 * i); j++) {// j: 控制*数-->7-2行数
                if (j == 1 || j == (7 - 2 * i)) { // 头和尾打*
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

    }

    /**
     * 方式2：打印实心菱形
     */
    public static void solidDiamondShape() {
        int size = 10;
        // 起始列号
        int startNum = size / 2 + 1;
        // 结束列号
        int endNum = size / 2 + 1;
        // 引入一个boolean类型的变量-->理解为一个“开关”
        boolean flag = true;
        for (int i = 1; i <= size; i++) {// i: 控制行数
            for (int j = 1; j <= size; j++) { // j: 控制*数
                if (j >= startNum && j <= endNum) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            // 换行
            System.out.println();
            if (endNum == size) {
                flag = false;
            }
            if (flag) { // flag是true,相当于在菱形的上半侧，flag是false，相当于在菱形的下半侧
                startNum--;
                endNum++;
            } else {
                startNum++;
                endNum--;
            }
        }
    }

    /**
     * 打印空心菱形
     */
    public static void hollowDiamond() {
        int size = 11;
        int startNum = size / 2 + 1;
        int endNum = size / 2 + 1;
        boolean flag = true;
        for (int i = 1; i <= size; i++) {
            for (int j = 1; j <= size; j++) {
                if (j == startNum || j == endNum) {
                    System.out.print("*");
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
            if (endNum == size) {
                flag = false;
            }
            if (flag) {
                startNum--;
                endNum++;
            } else {
                startNum++;
                endNum--;
            }
        }
    }

    /**
     * 百钱买百鸡：
     * 公鸡5文钱一只，母鸡3文钱一只，小鸡3只一文钱。用100文钱买100只鸡，其中公鸡、母鸡、小鸡都必须要有
     * 问：公鸡、母鸡、小鸡买多少刚好筹足100文钱
     * 数学：设未知数
     * 公鸡：x只
     * 母鸡：y只
     * 小鸡：z只
     * x+y+z=100只
     * 5x+3y+z/3=100钱
     */
    public static void aHundredDollarsForAHundredChickens() {
        for (int x = 1; x <= 100; x++) {
            for (int y = 1; y <= 100; y++) {
                for (int z = 1; z <= 100; z++) {
                    if ((x + y + z == 100) && (5 * x + 3 * y + z / 3 == 100) && (z % 3 == 0)) {
                        System.out.println("公鸡: x = " + x + ",母鸡: y = " + y + ",小鸡: z = " + z);
                    }
                }
            }
        }
    }

    /**
     * 百钱买百鸡：
     * 公鸡5文钱一只，母鸡3文钱一只，小鸡3只一文钱。用100文钱买100只鸡，其中公鸡、母鸡、小鸡都必须要有
     * 问：公鸡、母鸡、小鸡买多少刚好筹足100文钱
     * 数学：设未知数
     * 公鸡：x只
     * 母鸡：y只
     * 小鸡：z只
     * x+y+z=100只
     * 5x+3y+z/3=100钱
     * 优化：不可能拿100块钱全部拿来买公鸡or母鸡or小鸡
     * 100-1-3=96  96/5 = 19(只公鸡)
     * 100-5-1=94  94/3 = 31(只母鸡)
     */
    public static void aHundredDollarsForAHundredChickens2() {
        for (int x = 1; x <= 19; x++) {
            for (int y = 1; y <= 31; y++) {
                int z = 100 - x - y;
                if ((5 * x + 3 * y + z / 3 == 100) && (z % 3 == 0)) {
                    System.out.println("公鸡: x = " + x + ",母鸡: y = " + y + ",小鸡: z = " + z);
                }
            }
        }
    }

}
